/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.epsgrau.controller;


import java.text.ParseException;
import java.util.List;
import org.epsgrau.TO.ActividadDetalleTO;
import org.epsgrau.TO.MateriaTO;
import org.epsgrau.TO.ProcesoTO;
import org.epsgrau.TO.TipoProcesoTO;
import org.epsgrau.entity.ActividadDetalle;
import org.epsgrau.entity.Proceso;
import org.epsgrau.helper.Conversiones;
import org.epsgrau.servicios.ServicioOperacionesActividadDetalleInterface;
import org.epsgrau.servicios.ServicioOperacionesProcesoInterface;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

/**
 *
 * @author Miguel
 */
@Controller
public class ControladorPrincipal {

    @Autowired
    ServicioOperacionesProcesoInterface servicioProceso;
    
    @Autowired
    ServicioOperacionesActividadDetalleInterface servicioActividadDetalle;
    
    
    @RequestMapping(value = "/index.htm", method = RequestMethod.GET)
    public String home() {    
        return "home";
    }
    
    @RequestMapping(value = "insertar_demandamte.htm",method = RequestMethod.GET)
    public ModelAndView frmInsertarDemandante(){
        ModelAndView mv=new ModelAndView("frmDemandantes");
        return mv;
    }
    
    @RequestMapping(value = "insertar_proceso.htm",method = RequestMethod.GET)
    public ModelAndView frmInsertar(@RequestParam(required = false)String id){
        ModelAndView mv=new ModelAndView("frmInsertar");
        mv.addObject("lista_ramas", servicioProceso.getListaRamas());       
//        mv.addObject("lista_tipoProcesos", servicioProceso.getListaTipoProcesos()); 
        mv.addObject("lista_materias", servicioProceso.getListaMaterias());
        mv.addObject("lista_responsables", servicioProceso.getListaResponsables());
        mv.addObject("PageTitle","Nuevo Proceso");
        ProcesoTO p = new ProcesoTO();
                if(id!=null){
       try {
              p=Conversiones.convertirEntityaTo(servicioProceso.getBuscaProceso(id));
            } catch (ParseException ex) {
                ex.printStackTrace();
            }}
        mv.addObject("procesoBB", p);
        return mv;
    }
    
    @RequestMapping(value="/tipoProcesoPorRama.htm", method = RequestMethod.GET)
	public @ResponseBody List<TipoProcesoTO> getTipoProcesoPorRama(@RequestParam("cod_rama") String query) { 
//            System.out.println("cod TipoProceso: "+query);
            return servicioProceso.getTipoProcesoPorRama(query);
        }
    
    @RequestMapping(value="/materiaProcesoPorRama.htm", method = RequestMethod.GET)
	public @ResponseBody List<MateriaTO> getMateriaProcesoPorRama(@RequestParam("cod_rama") String query) { 
            return servicioProceso.getMateriaProcesoPorRama(query);
        }
    
    @RequestMapping(value = "/procesa_insertar_proceso.htm", method = RequestMethod.POST)
    public ModelAndView procesaInsertarProceso(@ModelAttribute ProcesoTO p) {
        try{
            System.out.println(p.getIdproceso());
        Proceso proceso=Conversiones.convertirToaEntity(p);
        servicioProceso.insertarActualizaProceso(proceso);   
        ModelAndView mv = new ModelAndView("exito");
        return mv;}
        catch(Exception ex){
            ModelAndView mv = new ModelAndView("error");
            return mv;}     
    }
    
        @RequestMapping(value = "/listado_procesos.htm", method = RequestMethod.GET)
        public ModelAndView listaProcesos(){
        ModelAndView mv=new ModelAndView("lista_procesos");
        mv.addObject("listado",servicioProceso.getListaProcesos());
        return mv;
    }
// 
//       @RequestMapping(value = "/buscar_proceso.htm", method = RequestMethod.GET)
//        public ModelAndView BuscaProceso(){
//        ModelAndView mv=new ModelAndView("busca_proceso");
//        mv.addObject("listado",servicioProceso.getListaProcesos());
//        return mv;
//    }
     
       @RequestMapping(value = "/eliminar_proceso.htm", method = RequestMethod.GET)
        public ModelAndView eliminaProceso(@RequestParam String id){
        servicioProceso.EliminarProceso(servicioProceso.getBuscaProceso(id));
        ModelAndView mv=new ModelAndView("lista_procesos");
        mv.addObject("listado",servicioProceso.getListaProcesos());

        return mv;
    }
       
  
       
        @RequestMapping(value = "actividaddetalle.htm",method = RequestMethod.GET)
    public ModelAndView FrmActividadDetalle(@RequestParam(required = false)String id){
        ModelAndView mv = new ModelAndView("frmActividadDetalle");
        ActividadDetalleTO to = new ActividadDetalleTO();
        if(id!=null){
            try {
                to=Conversiones.convertirEntityaTo(servicioActividadDetalle.obtenerActividadDetallePorId(id));
            } catch (ParseException e) {
                e.printStackTrace();
            } catch(NullPointerException ex){
                ex.printStackTrace();
            }
            
        }
        mv.addObject("actividadDetalleBB",to);
        mv.addObject("lista_procesos",servicioActividadDetalle.getListaProcesosPorNroExpediente());
        mv.addObject("lista_actividades",servicioActividadDetalle.getListaActividad());
        mv.addObject("lista_actividaddetalle",servicioActividadDetalle.getListaActividadDetalle());
        return mv;
    }
     
    @RequestMapping(value = "persistir_actividaddetalle.htm",method = RequestMethod.POST)
    public ModelAndView persistirActividadDetalle(@ModelAttribute ActividadDetalleTO actividadDetalleTO){
        try {
//            System.out.println("...------"+transferenciaTo.getId());
            ActividadDetalle actividadDetalle= Conversiones.convertirToaEntity(actividadDetalleTO);
            servicioActividadDetalle.insertarActualizaActividadDetalle(actividadDetalle);
        } catch (ParseException e) {
            e.printStackTrace();
        } catch(NullPointerException ex){
                ex.printStackTrace();
        }  
        
        ModelAndView mv = this.FrmActividadDetalle(null);
        return mv;
    }
     
    @RequestMapping(value = "eliminar_actividaddetalle.htm",method = RequestMethod.GET)
    public ModelAndView eliminarActividadDetalle(@RequestParam String id){
        servicioActividadDetalle.eliminarActividadDetalle(id);
        ModelAndView mv = this.FrmActividadDetalle(null);
        return mv;
    }
    
    @RequestMapping(value = "buscar_proceso.htm",method = RequestMethod.GET)
    public ModelAndView buscarProceso(@RequestParam(required = false)String id){
        
        ModelAndView mv=new ModelAndView("busca_proceso");
        ActividadDetalleTO to = new ActividadDetalleTO();
        if(id!=null){
            try {
                to=Conversiones.convertirEntityaTo(servicioActividadDetalle.obtenerActividadDetallePorId(id));
            } catch (ParseException e) {
                e.printStackTrace();
            } catch(NullPointerException ex){
                ex.printStackTrace();
            }
            
        }
        mv.addObject("lista_procesos", servicioActividadDetalle.getListaProcesosPorNroExpediente());
        mv.addObject("lista_actividaddetalle_proceso",servicioActividadDetalle.getListaActividadDetalleProceso(id));
        mv.addObject("PageTitle","Busca Proceso");
        mv.addObject("actividadDetalleBB", to);
        
        return mv;
    }
      
     @RequestMapping(value = "consultar_actividaddetalle_proceso.htm",method = RequestMethod.POST)
    public ModelAndView consultarActividadDetalleProceso(@ModelAttribute ActividadDetalleTO actividadDetalleTO){
        
        ModelAndView mv = this.buscarProceso(actividadDetalleTO.getIdproceso());
        return mv;
    }
           
}
